package com.gitee.wsl.transform.encode.base

//import com.gitee.wsl.transform.encode.base.Base16.decode
//import com.gitee.wsl.transform.encode.base.Base16.encode
//import com.gitee.wsl.transform.encode.base.Base32.decode
//import com.gitee.wsl.transform.encode.base.Base32.encode
//import com.gitee.wsl.transform.encode.base.Base36.encode
//import com.gitee.wsl.transform.encode.base.Base58.decode
//import com.gitee.wsl.transform.encode.base.Base58.encode
//
//
//object Multibase {
//    fun encode(b: Base, data: ByteArray): String {
//        when (b) {
//            Base.Base16 -> return b.prefix.toString() + encode(data)
//            Base.Base32 -> return b.prefix.toString() + (Base32.encode(data).lowercase().replace("=".toRegex(), "")
//
//            Base.Base32Upper -> return b.prefix.toString() + (java.lang.String(Base32().encode(data)) as String).replace(
//                "=".toRegex(),
//                ""
//            )
//
//            Base.Base32Hex -> return b.prefix.toString() + (Base32(true).encode(data) as String).lowercase().replace("=".toRegex(), "")
//
//            Base.Base32HexUpper -> return b.prefix.toString() + (java.lang.String(Base32(true).encode(data)) as String).replace(
//                "=".toRegex(),
//                ""
//            )
//
//            Base.Base36 -> return b.prefix.toString() + Base36.encode(data)
//            Base.Base58BTC -> return b.prefix + Base58.encode(data)
//            Base.Base64 -> return b.prefix + Base64.encodeBase64String(data).replaceAll("=", "")
//            Base.Base64Pad -> return b.prefix + Base64.encodeBase64String(data)
//            else -> throw java.lang.IllegalStateException("Unsupported base encoding: " + b.name)
//        }
//    }
//
//    fun encoding(data: String): Base {
//        return Base.Companion.lookup(data.get(0))
//    }
//
//    fun decode(data: String): ByteArray? {
//        val b = encoding(data)
//        val rest = data.substring(1)
//        when (b) {
//            Base.Base16 -> return Base16.decode(rest)
//            Base.Base32 -> return Base32.decode(rest)
//            Base.Base32Upper -> return Base32.decode(rest.lowercase())
//            Base.Base32Hex -> return Base32(true).decode(rest)
//            Base.Base32HexUpper -> return Base32(true).decode(rest.lowercase())
//            Base.Base36 -> return Base36.decode(rest)
//            Base.Base58BTC -> return Base58.decode(rest)
//            Base.Base64Pad, Base.Base64 -> return decodeBase64(rest)
//            else -> throw IllegalStateException("Unsupported base encoding: " + b.name)
//        }
//    }
//
//    enum class Base(var prefix: Char) {
//        Base1('1'),
//        Base2('0'),
//        Base8('7'),
//        Base10('9'),
//        Base16('f'),
//        Base32('b'),
//        Base32Upper('B'),
//        Base32Hex('v'),
//        Base32HexUpper('V'),
//        Base36('k'),
//        Base58Flickr('Z'),
//        Base58BTC('z'),
//        Base64('m'),
//        Base64Pad('M');
//
//        companion object {
//            private val lookup = mutableMapOf<Char, Base>()
//
//            init {
//                for (b in entries) lookup.put(b.prefix, b)
//            }
//
//            fun lookup(p: Char): Base {
//                check(lookup.containsKey(p)) { "Unknown Multibase type: " + p }
//                return lookup[p]!!
//            }
//        }
//    }
//}
